#include <iostream>
#include <stdio.h>
#include <queue>
using namespace std;
struct node{
    int t,p;
};
int main()
{
    queue<node> q;
    int i,n,h;
    cin>>n;
    for(i=0;i<n;i++){
        node m;
        cin>>m.t>>m.p;
        if(m.p>60)m.p=60;
        q.push(m);
    }
    cin>>h;
    int wait=0,maxw=0;
    double sum=0;
    int win[11]={0},num[11]={0};
    while(!q.empty()){
        int m1=0,m2=99999,flag=0;
        for(i=0;i<h;i++){
            if(q.front().t>=win[i]){
                num[i]++;
                win[i]=q.front().t+q.front().p;
                q.pop();
                flag=1;
                break;
            }
            if(m2>win[i]){
                m2=win[i];
                m1=i;
            }
        }
        if(flag==0){
            wait=win[m1]-q.front().t;
            if(wait>maxw)maxw=wait;
            sum=sum+wait;
            win[m1]=win[m1]+q.front().p;
            num[m1]++;
            q.pop();
        }
    }
    int ltime=0;
    for(i=0;i<h;i++){
        if(ltime<win[i])ltime=win[i];
    }
    printf("%.1lf %d %d\n",sum/n,maxw,ltime);
    for(i=0;i<h-1;i++){
        printf("%d ",num[i]);
    }
    printf("%d",num[i]);
    return 0;
}

